package thread08;

/**
 * 多线程安全问题的解决方案:
 *  1.多线程产生安全问题的原因
 *    a.多个线程操作共享数据
 *    b.每个线程还没有操作完共享数据,就切换到了其他线程,导致出现共享数据的错误
 *  2.可以通过同步代码块的方式保证安全性
 *      格式:
 *          synchronized(锁对象){//锁对象是任意的java对象
 *              将操作共享数据的代码放入同步代码块中
 *          }
 *   总结:
 *   同步代码块原理(类似:高铁上厕所)
 *      1.如果某个线程进入同步代码块就会持有该锁对象,其他线程就无法进入同步代码块,也不能持有该锁对象
 *      2.如果某个线程执行出同步代码块,就会释放该锁对象,其他线程就可以进如同步代码块并持有该锁对象
 *      3.所有线程必须使用同一个锁对象,才能起到保障安全性的作用
 */


public class ThreadDemo01 {
    public static void main(String[] args) {
        Ticket t = new Ticket();

        //启动三个线程模拟三个窗口:A窗口 B窗口 C窗口
        //这三个线程操作共享数据 int ticket = 100
        Thread thread01 = new Thread(t);
        thread01.setName("A窗口");
        thread01.start();

        Thread thread02 = new Thread(t);
        thread02.setName("B窗口");
        thread02.start();

        Thread thread03 = new Thread(t);
        thread03.setName("C窗口");
        thread03.start();

    }
}
